from django.db import models
from django.contrib.auth.models import User  # django框架自带的用户模型
from django.contrib.contenttypes.fields import GenericRelation  # 反向泛型关系
from django.urls import reverse
from ckeditor_uploader.fields import RichTextUploadingField
from read_statistics.models import ReadNumExpandMethod, ReadDetail


class BlogType(models.Model):
    """博客类型 模型"""
    # 博客类型名称 长度50字节
    type_name = models.CharField(max_length=50, verbose_name="类型")

    # 定义显示内容
    def __str__(self):
        return self.type_name


class Blog(models.Model, ReadNumExpandMethod):
    """博客 模型"""
    # 博客标题 长度50字节
    title = models.CharField(max_length=50, verbose_name="标题")
    # 博客类型 外键关联博客类型（博客类型模型创建在关联之前）
    blog_type = models.ForeignKey(BlogType, on_delete=models.DO_NOTHING, verbose_name="类型")
    # 博客内容 用django-ckeditor富文本框
    content = RichTextUploadingField(verbose_name="内容")
    # 博客作者 外键关联用户 删除时什么也不操作
    author = models.ForeignKey(User, on_delete=models.DO_NOTHING, verbose_name="作者")
    # 关联模型 ReadDetail
    read_details = GenericRelation(ReadDetail)
    # 博客创建时间
    created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    # 博客最后修改时间
    last_update_time = models.DateTimeField(auto_now=True, verbose_name="修改时间")

    def get_url(self):
        return reverse('blog_detail', kwargs={'blog_pk': self.pk})

    def get_email(self):
        return self.author.email

    def __str__(self):
        return "<Blog：%s>" % self.title

    class Meta:
        # 根据created_time 逆序
        ordering = ['-created_time']






